package heap


/*
1. 如何知道静态变量和实力变量需要多少空间： 数一下类的字段 注意：
1） 类是可以继承的；
2） long和double占连个位置
2. 哪个字段对应slots中的哪个位置： 在数字段时，按顺序编号  注意：
 1） 静态字段和实例字段分开编号
 2） 实例字段一定要继承关系的最顶端开始编号
 3） 考虑long和double

*/
type Object struct {
	Class  *Class
	//Fields Slots
	// 对于普通对象，data存放的还是slots
	// 对于数组，可以在其中存放各种类型的数组
	Data interface{} // Slots for Object, []int32 for int[] ...
}

func (self *Object) Fields() Slots {
	return self.Data.(Slots)
}

func newObject(class *Class) *Object {
	return &Object{
		Class:  class,
		Data: newSlots(class.InstanceSlotCount),
	}
}

func (self *Object) IsInstanceOf(class *Class) bool {
	return class.isAssignableFrom(self.Class)
}
